package com.example.traning.mall.service.account;

import com.example.traning.mall.controller.account.vo.*;
import com.example.traning.mall.dal.dataobject.account.AccountUser;
import com.example.traning.mall.framework.common.pojo.PageParam;
import com.example.traning.mall.framework.common.pojo.PageResult;

/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author Lei Yu
 * @since 2025-04-29
 */
public interface IAccountUserService {

    /**
     * 用户登录
     *
     * @param reqVO 封装了登录信息的对象
     * @return 成功登录的用户的信息，包括：ID、用户名、头像、JWT等数据
     */
    UserLoginResultVO login(UserLoginReqVO reqVO);

    /**
     * 退出登录
     *
     * @param currentPrincipal 当事人
     */
    void logout(CurrentPrincipal currentPrincipal);



    /**
     * 添加用户
     * @param reqVO 用户数据
     */
    void addNew(UserAddNewParam reqVO);

    /**
     * 删除用户
     *
     * @param id 用户ID
     */
    void delete(Long id);

    /**
     * 修改基本信息
     *
     * @param userId              用户ID
     * @param reqVO 新的基本信息
     */
    void updateInfo(Long userId, UserUpdateInfoParam reqVO);

    /**
     * 根据ID查询用户
     *
     * @param userId 用户ID
     * @return 匹配的用户信息
     */
    UserStandardVO getStandardById(Long userId);

    /**
     * 查询用户列表，将使用默认的每页记录数
     *
     * @param param 分页参数
     * @return 用户列表
     */
    PageResult<AccountUser> selectPage(PageParam param);

}
